home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-04-15 | 2.0 KB | 107 lines | [TEXT/MEDT] |
- MODULE CoroutinesTest;
-
- (*
- Implementation and Revisions:
- ============================
-
- Author Date Description
- ------ ---- -----------
-
- JT 7/4/94 First implementation (MacMETH_V3.2)
-
- *)
-
- FROM Terminal IMPORT
- WriteString, WriteLn, Read;
-
- FROM Coroutines IMPORT
- Coroutine,
- NewCoroutine,
- Transfer,
- NewProcess,
- Process,
- ResumeProcess,
- BEGINCriticalSection, ENDCriticalSection;
-
- VAR
- main,
- cID1,
- cID2 : Coroutine;
- pID1,
- pID2 : Process;
- ch : CHAR;
- p1Done,
- p2Done : BOOLEAN;
-
- PROCEDURE C1( );
- VAR
- i : INTEGER;
- me : Coroutine;
- BEGIN
- WriteString(" Coroutine 1 enables Process 1"); WriteLn;
- ResumeProcess(pID1);
- FOR i:= 1 TO 10 DO
- WriteString(" Coroutine 1");
- IF p1Done THEN
- WriteString(", and Process 1 is out of the game");
- p1Done := FALSE;
- END(*IF*);
- WriteLn;
- Transfer(me, cID2);
- END(*FOR*);
- END C1;
-
- PROCEDURE C2( );
- VAR
- i : INTEGER;
- me : Coroutine;
- BEGIN
- FOR i:= 1 TO 10 DO
- WriteString(" Coroutine 2"); WriteLn;
- Transfer(me, cID1);
- END(*FOR*);
- END C2;
-
- PROCEDURE P1();
- VAR
- i,j : INTEGER;
- BEGIN
- FOR i:= 1 TO 30000 DO
- j := 1;
- END(*FOR*);
- BEGINCriticalSection();
- p1Done := TRUE;
- ENDCriticalSection();
- END P1;
-
- PROCEDURE P2();
- VAR
- i,j : INTEGER;
- BEGIN
- FOR i:= 1 TO 30000 DO
- j := 1;
- END(*FOR*);
- BEGINCriticalSection();
- p2Done := TRUE;
- ENDCriticalSection();
- END P2;
-
- BEGIN
- p1Done := FALSE;
- p2Done := FALSE;
- NewCoroutine(C1, 4096D, cID1);
- NewCoroutine(C2, 4096D, cID2);
- NewProcess(P1, 4096D, pID1);
- NewProcess(P2, 4096D, pID2);
- WriteString("in main"); WriteLn;
- Transfer(main, cID1);
- WriteString("in main"); WriteLn;
- IF p2Done THEN WriteString("uups"); WriteLn; END;
- ResumeProcess(pID2);
- REPEAT
-
- UNTIL p2Done;
- WriteString("p2Done"); WriteLn;
- Read(ch);
- END CoroutinesTest.